docs(infra): design Compass self-host runner + adoption strategy (RIG-3070) - #804
Open
rigel-mintaka wants to merge 1 commit into
Open
docs(infra): design Compass self-host runner + adoption strategy (RIG-3070)#804rigel-mintaka wants to merge 1 commit into
rigel-mintaka wants to merge 1 commit into
Conversation
|
Compass engineering docs preview: https://compass-obs-rig-3070-runner.compass-eng-docs.pages.dev Deployed from Changed pages: |
rigel-mintaka
force-pushed
the
compass-obs/rig-3070-runner-adoption-strategy
branch
from
August 31, 2026 19:47
f4f27c2 to
650c699
Compare
rigel-mintaka
marked this pull request as ready for review
August 31, 2026 19:47
rigel-mintaka
marked this pull request as draft
August 31, 2026 23:21
rigel-mintaka
force-pushed
the
compass-obs/rig-3070-runner-adoption-strategy
branch
2 times, most recently
from
September 1, 2026 04:13
30a299d to
99722b5
Compare
rigel-mintaka
force-pushed
the
compass-obs/rig-3070-runner-adoption-strategy
branch
from
September 1, 2026 05:06
99722b5 to
43fb66c
Compare
rigel-mintaka
marked this pull request as ready for review
September 1, 2026 05:07
rigel-mintaka
marked this pull request as draft
September 2, 2026 20:29
rigel-mintaka
added a commit
that referenced
this pull request
Sep 2, 2026
…sh macOS (RIG-3139) Designs the reversal of the RIG-2542 client-only retirement: mode="embedded" returns to the Compass native app as the low-friction onboarding / local-dev front door, ADDED ALONGSIDE the fully-surviving client mode. The retirement's premise (the microVM Runner's KVM floor retiring local agent execution) is falsified now that podman is a permanent supported single-tenant tier per the trust-model boundary (DL-318, compass-obs #804). Covers the mode-selection contract, supervisor re-wire against the current stack, cross-OS preflight, bundle re-scope (sidecars return, postgres stays a DL-260 container), the macOS podman-machine provisioning spike, and the UI embedded boot arm. Records the record on the ui/ design path (RIG-3113 dissolved product/ into ui/) and lands the ledger delta in DECISIONS.md: new rows DL-319 (dual-mode thesis), DL-320 (dual-mode app.toml), DL-321 (sidecar bundle sans postgres); status flips DL-235/237/238 → Superseded by DL-319/320/321. DL-236's standalone-compass-stack half stays Active. Folds Matt's freeze-gate topology + backend feedback: the §Topology matrix separates the two independent axes (app mode: embedded/client; runner backend: podman/microVM) and records the recommended backend per funnel entry — embedded-local is podman-primary (macOS cannot do microVM; WSL2 has no KVM out of the box), self-host is microVM-recommended with podman the cost-sensitive tier, managed is microVM. Scrubs managed-hosted to the trust-model boundary only, with an OSS-core scope note keeping product-strategy specifics out of this repo. Adds three load-bearing open questions with recommendations for Matt's gate: OQ-9 (docker socket vs force-podman — force-podman: the --userns=keep-id:uid= isolation boundary is podman-specific), OQ-10 (apple/container as a macOS backend — defer: macOS-26 + Apple-silicon-only, pre-1.0), OQ-11 (embedded microVM on Linux — v1 container-only, follow-up). Also folds the prior review passes' podman-version FATAL preflight (delta 4, OQ-8) and the doc-comment reconciliations. Refs RIG-3139 Spec-impact: adds the embedded-mode revival design record (Draft) under docs/designs/ui/ Ledger-impact: DL-319/320/321 added; DL-235/237/238 flipped to Superseded Co-authored-by: Matt Wilkinson <matt@rigel.build>
rigel-mintaka
changed the base branch from
main
to
compass-obs/managed-boundary-naming-rule
September 2, 2026 21:27
rigel-mintaka
force-pushed
the
compass-obs/rig-3070-runner-adoption-strategy
branch
from
September 2, 2026 21:27
43fb66c to
d33fa75
Compare
rigel-mintaka
added a commit
that referenced
this pull request
Sep 2, 2026
…sh macOS (RIG-3139) Designs the reversal of the RIG-2542 client-only retirement: mode="embedded" returns to the Compass native app as the low-friction onboarding / local-dev front door, ADDED ALONGSIDE the fully-surviving client mode. The retirement's premise (the microVM Runner's KVM floor retiring local agent execution) is falsified now that podman is a permanent supported single-tenant tier per the trust-model boundary (DL-318, compass-obs #804). Covers the mode-selection contract, supervisor re-wire against the current stack, cross-OS preflight, bundle re-scope (sidecars return, postgres stays a DL-260 container), the macOS podman-machine provisioning spike, and the UI embedded boot arm. Records the record on the ui/ design path (RIG-3113 dissolved product/ into ui/) and lands the ledger delta in DECISIONS.md: new rows DL-319 (dual-mode thesis), DL-320 (dual-mode app.toml), DL-321 (sidecar bundle sans postgres); status flips DL-235/237/238 → Superseded by DL-319/320/321. DL-236's standalone-compass-stack half stays Active. Folds Matt's freeze-gate topology + backend feedback: the §Topology matrix separates the two independent axes (app mode: embedded/client; runner backend: podman/microVM) and records the recommended backend per funnel entry — embedded-local is podman-primary (macOS cannot do microVM; WSL2 has no KVM out of the box), self-host is microVM-recommended with podman the cost-sensitive tier, managed is microVM. Scrubs managed-hosted to the trust-model boundary only, with an OSS-core scope note keeping product-strategy specifics out of this repo. Adds three load-bearing open questions with recommendations for Matt's gate: OQ-9 (docker socket vs force-podman — force-podman: the --userns=keep-id:uid= isolation boundary is podman-specific), OQ-10 (apple/container as a macOS backend — defer: macOS-26 + Apple-silicon-only, pre-1.0), OQ-11 (embedded microVM on Linux — v1 container-only, follow-up). Also folds the prior review passes' podman-version FATAL preflight (delta 4, OQ-8) and the doc-comment reconciliations. Refs RIG-3139 Spec-impact: adds the embedded-mode revival design record (Draft) under docs/designs/ui/ Ledger-impact: DL-319/320/321 added; DL-235/237/238 flipped to Superseded Co-authored-by: Matt Wilkinson <matt@rigel.build>
Base automatically changed from
compass-obs/managed-boundary-naming-rule
to
main
September 3, 2026 01:15
|
Merging to
After your PR is submitted to the merge queue, this comment will be automatically updated with its status. If the PR fails, failure details will also be posted here |
mattwilkinsonn
added a commit
that referenced
this pull request
Sep 3, 2026
…sh macOS (RIG-3139) (#833) Designs the reversal of the RIG-2542 client-only retirement: mode="embedded" returns to the Compass native app as the low-friction onboarding / local-dev front door, ADDED ALONGSIDE the fully-surviving client mode. The retirement's premise (the microVM Runner's KVM floor retiring local agent execution) is falsified now that podman is a permanent supported single-tenant tier per the trust-model boundary (DL-318, compass-obs #804). Covers the mode-selection contract, supervisor re-wire against the current stack, cross-OS preflight, bundle re-scope (sidecars return, postgres stays a DL-260 container), the macOS podman-machine provisioning spike, and the UI embedded boot arm. Records the record on the ui/ design path (RIG-3113 dissolved product/ into ui/) and lands the ledger delta in DECISIONS.md: new rows DL-319 (dual-mode thesis), DL-320 (dual-mode app.toml), DL-321 (sidecar bundle sans postgres); status flips DL-235/237/238 → Superseded by DL-319/320/321. DL-236's standalone-compass-stack half stays Active. Folds Matt's freeze-gate topology + backend feedback: the §Topology matrix separates the two independent axes (app mode: embedded/client; runner backend: podman/microVM) and records the recommended backend per funnel entry — embedded-local is podman-primary (macOS cannot do microVM; WSL2 has no KVM out of the box), self-host is microVM-recommended with podman the cost-sensitive tier, managed is microVM. Scrubs managed-hosted to the trust-model boundary only, with an OSS-core scope note keeping product-strategy specifics out of this repo. Adds three load-bearing open questions with recommendations for Matt's gate: OQ-9 (docker socket vs force-podman — force-podman: the --userns=keep-id:uid= isolation boundary is podman-specific), OQ-10 (apple/container as a macOS backend — defer: macOS-26 + Apple-silicon-only, pre-1.0), OQ-11 (embedded microVM on Linux — v1 container-only, follow-up). Also folds the prior review passes' podman-version FATAL preflight (delta 4, OQ-8) and the doc-comment reconciliations. Refs RIG-3139 Spec-impact: adds the embedded-mode revival design record (Draft) under docs/designs/ui/ Ledger-impact: DL-319/320/321 added; DL-235/237/238 flipped to Superseded Co-authored-by: Matt Wilkinson <matt@rigel.build>
rigel-mintaka
force-pushed
the
compass-obs/rig-3070-runner-adoption-strategy
branch
5 times, most recently
from
September 4, 2026 19:12
841199d to
e9def30
Compare
rigel-mintaka
added a commit
that referenced
this pull request
Sep 4, 2026
…-3238) ReviewDesign869 returned 1 high / 2 medium / 4 low on PR #869. Grounding fidelity was clean (all code + cross-record citations verify at source); these are ledger-collision and plan-completeness fixes. All folded; the two mediums each also surface a load-bearing fork to Matt as a new OQ rather than being decided here. - HIGH (ledger collision): DL-326's Decision cell cited DL-325, an unlanded number double-claimed by #804 (RIG-3070) and #868 (RIG-2863). Since #868 is review-ready it may take DL-325 for an unrelated decision, and the cell is immutable after append. Re-cite the runner trust-model split by name+issue (RIG-3070 / PR #804), not the contested number, and add a Global Constraint ID-allocation + freeze-order note (mirroring the sibling embedded-revival record's GC6): re-grep main's ledger tail before landing, and the record does not depend on #804 landing first. - MEDIUM (T-4 premise gap): removing podman-machine removes the Linux VM the runner runs IN on macOS today (compass-local-dev:194-205 ruled the runner runs INSIDE the VM), so apple-container forces the runner to run natively on darwin. Add a T-1(f) spike leg, an Approach reason-2 caveat, a T-4 scope note, and OQ-12 (load-bearing Matt fork: does a NO re-open adoption?). - MEDIUM (T-2 podman surface): the stack has a second hard-coded podman shell (postgres_container.go:246-259 + collector_container.go:62) and ImageEnsurer is podman-hardwired at its production constructor (image.go:44-45). DL-260 keeps postgres a rootless-podman container, so a macOS host still needs podman for the stack. Widen T-2's off-interface enumeration, concede the scoped "no machine" win in Approach reason 2, and add OQ-13 (Matt fork: postgres to apple-container, or --database-external as the macOS default?). - LOW x4: nine-verbs wording (Resize is the ninth, not a tenth); image.go ImageExists citation span (:713, outside the cited :681-684); the OQ-1..OQ-4 gate carve-out for OQ-5's judgment call; DL-326 record link gains the §Approach anchor for the one-hop convention. Checks: markdownlint 0 errors; design-ledger-gate OK (291 rows, 122 headers). Status stays Draft — freezes Active on merge. Refs RIG-3238 Co-authored-by: Matt Wilkinson <matt@rigel.build>
rigel-mintaka
added a commit
that referenced
this pull request
Sep 4, 2026
…-3238) ReviewDesign869 returned 1 high / 2 medium / 4 low on PR #869. Grounding fidelity was clean (all code + cross-record citations verify at source); these are ledger-collision and plan-completeness fixes. All folded; the two mediums each also surface a load-bearing fork to Matt as a new OQ rather than being decided here. - HIGH (ledger collision): DL-326's Decision cell cited DL-325, an unlanded number double-claimed by #804 (RIG-3070) and #868 (RIG-2863). Since #868 is review-ready it may take DL-325 for an unrelated decision, and the cell is immutable after append. Re-cite the runner trust-model split by name+issue (RIG-3070 / PR #804), not the contested number, and add a Global Constraint ID-allocation + freeze-order note (mirroring the sibling embedded-revival record's GC6): re-grep main's ledger tail before landing, and the record does not depend on #804 landing first. - MEDIUM (T-4 premise gap): removing podman-machine removes the Linux VM the runner runs IN on macOS today (compass-local-dev:194-205 ruled the runner runs INSIDE the VM), so apple-container forces the runner to run natively on darwin. Add a T-1(f) spike leg, an Approach reason-2 caveat, a T-4 scope note, and OQ-12 (load-bearing Matt fork: does a NO re-open adoption?). - MEDIUM (T-2 podman surface): the stack has a second hard-coded podman shell (postgres_container.go:246-259 + collector_container.go:62) and ImageEnsurer is podman-hardwired at its production constructor (image.go:44-45). DL-260 keeps postgres a rootless-podman container, so a macOS host still needs podman for the stack. Widen T-2's off-interface enumeration, concede the scoped "no machine" win in Approach reason 2, and add OQ-13 (Matt fork: postgres to apple-container, or --database-external as the macOS default?). - LOW x4: nine-verbs wording (Resize is the ninth, not a tenth); image.go ImageExists citation span (:713, outside the cited :681-684); the OQ-1..OQ-4 gate carve-out for OQ-5's judgment call; DL-326 record link gains the §Approach anchor for the one-hop convention. Checks: markdownlint 0 errors; design-ledger-gate OK (291 rows, 122 headers). Status stays Draft — freezes Active on merge. Refs RIG-3238 Co-authored-by: Matt Wilkinson <matt@rigel.build>
rigel-mintaka
added a commit
that referenced
this pull request
Sep 4, 2026
…sign (RIG-3238) ReviewDesign869r2 verified all 7 round-1 findings CLOSED but caught two mediums the round-1 fold's own new prose introduced. Both are mechanical text corrections with no design consequence. - MEDIUM (guard-bullet facts): the ID-allocation/freeze-order Global Constraint bullet had wrong PR->DL attributions on every clause. Ground truth (verified via gh pr diff + main's ledger): main's tail ends at DL-324 (landed by #870, merged); DL-325 is claimed by #804 (RIG-3070, draft) AND #859 (RIG-2863); DL-326 -- this record's own number -- is claimed by #859, which is review-ready (NOT draft). The bullet missed the real live collision (#859 on DL-326) and named #868 (which actually claims DL-327). Rewrote the factual clauses to match; kept the two correct load-bearing clauses (the MUST-re-grep-before-landing instruction and does-NOT-depend-on-#804). The immutable DL-326 cell was already merge-order-safe (name+issue cite), so this only corrected mutable prose. - MEDIUM (unknown-count consistency): round-1 widened the ledger cell from five to six unknowns (adding runner-on-darwin / OQ-12) but left three "five" sites in the record body: the Why-STAGED enumeration, the reject-default alternative, and the T-1 task heading. Aligned all three to six + OQ-12, and aligned the threat classification (OQ-1, OQ-2, and OQ-12 threaten adoption) with the cell's widened re-open trigger. - LOW: re-wrapped two range-overwrite orphan lines to the file's ~72-col width. Checks: markdownlint 0 errors; design-ledger-gate OK (291 rows, 122 headers). Status stays Draft -- freezes Active on merge. Refs RIG-3238 Co-authored-by: Matt Wilkinson <matt@rigel.build>
rigel-mintaka
force-pushed
the
compass-obs/rig-3070-runner-adoption-strategy
branch
from
September 4, 2026 20:21
e9def30 to
bb95c9e
Compare
…-3070) Frozen-on-merge design record for the self-host runner topology and adoption strategy. The security boundary follows the trust model: untrusted multi-tenant operation requires the microVM hardware boundary; self-host single-tenant deployments keep podman as a permanent, supported entry tier (no /dev/kvm), microVM recommended not required; embedded-local mode revived as the cross-OS podman-backed developer front door (app-architecture reversal designed in the compass-native embedded-revival record). Records DIRECTION only. When and how a hosted multi-tenant service sequences its move to microVM-only is a managed-plane rollout decision, out of scope here (docs/concepts/self-host-and-managed.md). Encodes DL-325. Spec-impact: none. Refs RIG-3070 Co-authored-by: Matt Wilkinson <matt@rigel.build>
rigel-mintaka
force-pushed
the
compass-obs/rig-3070-runner-adoption-strategy
branch
from
September 4, 2026 21:38
bb95c9e to
b640244
Compare
rigel-mintaka
marked this pull request as ready for review
September 4, 2026 21:47
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Documents Matt's ruled self-host runner topology and adoption strategy as a frozen-on-merge contract in a new design record under
docs/designs/infra/runtime/compass-runner-adoption-strategy/. Mints DL-325.What this record freezes
The security boundary follows the trust model, not the deployment uniformly (Matt, 2026-08, amended 2026-08-31):
microvm-runner.md:403-405); this record scopes that end state to the untrusted-multi-tenant trust model./dev/kvm— it runs on any cheap VPS or box. A self-host operator runs their own agents on their own code on their own box, so there is no untrusted tenant to isolate and the KVM boundary is optional. microVM is the recommended (not required) self-host upgrade, for defense-in-depth or an operator who runs untrusted code or shares the box. This amends the frozen KVM-only amendment with a self-host carve-out, honestly flagged as reopening a frozen decision, and distinguished from the amendment's own already-rejected carve-out (which was about the untrusted-multi-tenant boundary, not this single-tenant case).compass-app's supervisor invocation / embedded config arm / bundle, reversing DL-235's client-only charter) is designed in the compass-native lane's embedded-revival record.SelectBackendstack backends (podman + microVM), both already shipping — embedded-local runs the same podman backend locally, not a third runtime.Relationship to the frozen corpus
The ruling ratifies one frozen record, records the deferred reversal of a second, and amends a third:
Scope boundary
How a hosted multi-tenant service adopts, sequences, and deploys the microVM-only boundary is a managed-plane concern and is out of scope for this public OSS record (
docs/concepts/self-host-and-managed.md). This record carries the core capability and the self-host/embedded adoption strategy only.Tasks (filed at freeze)
verifyBackendPreflightoverVerifyMicroVMSupport;compass-stack preflighthostcheck split) — consumed here, not built here; podman backend retained permanently for self-host. Owner: compass-runner.The embedded app-architecture reversal is deliberately NOT a task here — it is the compass-native lane's record. OQ-1 (microVM readiness bar), OQ-2 (VPS provider pick), OQ-3 (macOS podman-machine socket spike) are deferred and non-freeze-blocking.
Ledger-impact: mints DL-325 in
docs/designs/DECISIONS.md.Spec-impact: none (design record; the runner-topology spec follows the impl tasks post-freeze).
Refs RIG-3070
Co-authored-by: Matt Wilkinson matt@rigel.build